/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AccesoDatos.Persistencia.Manager;

import AccesoDatos.Persistencia.Entidad.EOrden;
import LogicaNegocio.Biblioteca.Orden;
import MainBiblioSoft.BiblioSoft;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;

/**
 * Esta clase en java es el gestor de persistencia
 * de objetos Orden en la base de datos BiblioSoft.
 *
 * @author sebaxtian
 * Archivo: ManagerOrden.java
 * @version 1.0
 * Fecha: vie may  7 02:48:06 COT 2010
 */


public class ManagerOrden {

    @PersistenceUnit
    private EntityManagerFactory managerFactory;
    private EntityManager entityManager;

    /**
     * Metodo constructor, crea un gestor para la persistencia de Area
     * 
     */
    public ManagerOrden() {
        managerFactory = BiblioSoft.managerFactory;
        entityManager = managerFactory.createEntityManager();
    }

    /**
     * Metodo encargado de la persistencia en la entidad Orden
     * de un objeto Orden
     *
     * @param orden
     */
    public void crearOrden(Orden orden) {
        entityManager.clear();
        EOrden entidadOrden = new EOrden();
        entidadOrden.setIdentificacionusuario(orden.getIdentificacionUsuario());
        entidadOrden.setIdejemplar(orden.getIdEjemplar());
        entidadOrden.setFechaorden(orden.getFecha());
        entidadOrden.setHoraorden(orden.getHora());
        entidadOrden.setCancelada(orden.getCancelada());
        //persiste el objeto en la entidad
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entityManager.persist(entidadOrden);
        transaccion.commit();
        entityManager.clear();
    }

    public void cancelarOrden(int idOrden) {
        entityManager.clear();
        EOrden entidadOrden;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadOrden = entityManager.find(EOrden.class, idOrden);
        transaccion.commit();
        if(entidadOrden != null){
            entidadOrden.setCancelada(true);
            transaccion.begin();
            entityManager.merge(entidadOrden);
            transaccion.commit();
        }
        entityManager.clear();
    }

    public Orden obtenerOrden(int idOrden) {
        entityManager.clear();
        EOrden entidadOrden;
        Orden orden = null;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadOrden = entityManager.find(EOrden.class, idOrden);
        transaccion.commit();
        if(entidadOrden != null){
            orden = new Orden();
            orden.setIdOrden(entidadOrden.getIdorden());
            orden.setIdentificacionUsuario(entidadOrden.getIdentificacionusuario());
            orden.setIdEjemplar(entidadOrden.getIdejemplar());
            orden.setFecha(entidadOrden.getFechaorden());
            orden.setHora(entidadOrden.getHoraorden());
            orden.setCancelada(entidadOrden.getCancelada());
        }
        entityManager.clear();
        return orden;
    }

    public int idUltimaOrden() {
        entityManager.clear();
        Query consulta = entityManager.createQuery("SELECT MAX(e.idorden) FROM EOrden e");
        entityManager.clear();
        return (Integer)consulta.getSingleResult();
    }

}
